from typing import List


class Solution:
    def numberOfSubarrays(self, nums: List[int]) -> int:
        ans = len(nums)
        st = [[float('inf'), 0]]  # 无穷大哨兵
        # 维护 一个 单调递减的栈，如果 加入的栈 和 当前栈顶相同，说明这两个可以组成，满足条件
        # 栈 存储 单调递减的系列 和 出现的次数
        for x in nums:
            while x > st[-1][0]:
                st.pop()
            if x == st[-1][0]:
                ans += st[-1][1]
                st[-1][1] += 1
            else:
                st.append([x, 1])
        return ans
